home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 16 / Computer Interactive cdrom 16 - dic 98.iso / zdnetit / content / CLASSBLD.ZIP / Include / CB_CriticalValueTree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-06  |  6.4 KB  |  187 lines

  1. #ifndef CB_CRITICAL_VALUETREE_H
  2. #define CB_CRITICAL_VALUETREE_H
  3.  
  4. #include <assert.h>
  5.  
  6. #include "CB_CriticalSection.h"
  7. #include "CB_ValueTree.h"
  8.  
  9. // defines for include files
  10. #define RELATION_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  11. private:\
  12.     ClassTo* _first##NameTo;\
  13.     int _count##NameTo;\
  14. \
  15. public:\
  16.     static CriticalSection _criticalSection##NameTo;\
  17. \
  18.     void Add##NameTo(ClassTo* item);\
  19.     void Remove##NameTo(ClassTo* item);\
  20.     void RemoveAll##NameTo();\
  21.     void DeleteAll##NameTo();\
  22.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  23.     ClassTo* GetFirst##NameTo();\
  24.     ClassTo* GetLast##NameTo();\
  25.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  26.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  27.     int Get##NameTo##Count();\
  28.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  29.  
  30. #define RELATION_NOFILTER_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  31. private:\
  32.     ClassTo* _first##NameTo;\
  33.     int _count##NameTo;\
  34. \
  35. public:\
  36.     static CriticalSection _criticalSection##NameTo;\
  37. \
  38.     void Add##NameTo(ClassTo* item);\
  39.     void Remove##NameTo(ClassTo* item);\
  40.     void RemoveAll##NameTo();\
  41.     void DeleteAll##NameTo();\
  42.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  43.     ClassTo* GetFirst##NameTo();\
  44.     ClassTo* GetLast##NameTo();\
  45.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  46.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  47.     int Get##NameTo##Count();\
  48.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  49.  
  50. #define RELATION_CRITICAL_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  51. public:\
  52.     ClassFrom* _ref##NameFrom;\
  53.     ClassTo* _parent##NameFrom;\
  54.     ClassTo* _left##NameFrom;\
  55.     ClassTo* _right##NameFrom;\
  56.     ClassTo* _sibling##NameFrom;\
  57. \
  58. public:\
  59.     ClassFrom* Get##NameFrom() { return _ref##NameFrom; };
  60.  
  61. // defines implementation
  62. #define INIT_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  63. {\
  64.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  65.     INIT_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  66. }
  67.  
  68. #define EXIT_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  69. {\
  70.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  71.     EXIT_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  72. }
  73.  
  74. #define REPLACE_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  75. {\
  76.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  77.     REPLACE_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  78. }
  79.  
  80. #define INIT_CRITICAL_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  81. {\
  82.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  83.     INIT_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  84. }
  85.  
  86. #define EXIT_CRITICAL_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  87. {\
  88.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  89.     EXIT_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  90. }
  91.  
  92. #define REPLACE_CRITICAL_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  93. {\
  94.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  95.     REPLACE_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  96. }
  97.  
  98. #define METHODS_CRITICAL_VALUETREE_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  99.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  100. void ClassFrom##::Add##NameTo(ClassTo* item)\
  101. {\
  102.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  103.     METHOD_VALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  104. }\
  105. \
  106. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  107. {\
  108.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  109.     METHOD_VALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  110. }\
  111. \
  112. void ClassFrom##::RemoveAll##NameTo()\
  113. {\
  114.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  115.     METHOD_VALUETREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  116. }\
  117. \
  118. void ClassFrom##::DeleteAll##NameTo()\
  119. {\
  120.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  121.     METHOD_VALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  122. }\
  123. \
  124. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  125. {\
  126.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  127.     METHOD_VALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  128. }\
  129. \
  130. ClassTo* ClassFrom##::GetFirst##NameTo()\
  131. {\
  132.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  133.     METHOD_VALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  134. }\
  135. \
  136. ClassTo* ClassFrom##::GetLast##NameTo()\
  137. {\
  138.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  139.     METHOD_VALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  140. }\
  141. \
  142. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  143. {\
  144.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  145.     METHOD_VALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  146. }\
  147. \
  148. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  149. {\
  150.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  151.     METHOD_VALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  152. }\
  153. \
  154. int ClassFrom##::Get##NameTo##Count()\
  155. {\
  156.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  157.     METHOD_VALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  158. }
  159.  
  160. #define METHODS_CRITICAL_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  161.  
  162. #define BODY_CRITICAL_VALUETREE_FIND(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  163. {\
  164.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  165.     BODY_VALUETREE_FIND(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  166. }
  167.  
  168. #define BODY_CRITICAL_VALUETREE_FINDREVERSE(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  169. {\
  170.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  171.     BODY_VALUETREE_FINDREVERSE(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  172. }
  173.  
  174. #define WRITE_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  175. {\
  176.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  177.     WRITE_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  178. }
  179.  
  180. #define READ_CRITICAL_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  181. {\
  182.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  183.     READ_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  184. }
  185.  
  186. #endif
  187.